package com.erp.erp_servers.bill_declare;

import com.erp.erp_entitys.bill_declare.*;
import com.erp.erp_entitys.business.entity.CarryDetailEntity;
import com.erp.erp_entitys.business.entity.CarryDetailProductEntity;
import com.erp.erp_entitys.business.entity.CarryDetailProductPartsEntity;

import java.math.BigDecimal;
import java.util.List;

/**
 * 报关主信息表(BillDeclareInfo)表服务接口
 *
 * @author makejava
 * @since 2021-01-08 17:38:10
 */
public interface BillDeclareInfoService {

    /**
     * 通过ID查询单条数据
     *
     * @param declareId 主键
     * @return 实例对象
     */
    BillDeclareInfo queryInfoById(Integer declareId);


    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareInfo> queryAllInfoByLimit(int offset, int limit);
    /*
    *查询所有报关表
    * */
    List<BillDeclareInfo> selectAllInfo();


    /*
     *根据箱体查询报关表
     * */
    List<BillDeclareInfo> selectAllInfobySearch(InfoSearch search);
    /**
     * 新增数据
     *
     * @param billDeclareInfo 实例对象
     * @return 实例对象
     */
    BillDeclareInfo insertInfo(BillDeclareInfo billDeclareInfo);

    /**
     * 修改数据
     *
     * @param billDeclareInfo 实例对象
     * @return 实例对象
     */
    BillDeclareInfo updateInfo(BillDeclareInfo billDeclareInfo);

    /**
     * 通过主键删除数据
     *
     * @param declareId 主键
     * @return 是否成功
     */
    boolean deleteInfoById(Integer declareId);
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BillDeclareFile queryFileById(Integer id);
    /*
    * 查询出运产品、配件可用数量
    * */
    BigDecimal selectLastAmount(BillDeclareProductInfo pro);
    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareFile> queryAllFileByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param billDeclareFile 实例对象
     * @return 实例对象
     */
    BillDeclareFile insertFile(BillDeclareFile billDeclareFile);

    /**
     * 修改数据
     *
     * @param billDeclareFile 实例对象
     * @return 实例对象
     */
    BillDeclareFile updateFile(BillDeclareFile billDeclareFile);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteFileById(Integer id);
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BillDeclareLog queryLogById(Integer id);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareLog> queryAllLogByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param billDeclareLog 实例对象
     * @return 实例对象
     */
    BillDeclareLog insertLog(BillDeclareLog billDeclareLog);

    /**
     * 修改数据
     *
     * @param billDeclareLog 实例对象
     * @return 实例对象
     */
    BillDeclareLog updateLog(BillDeclareLog billDeclareLog);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteLogById(Integer id);
    /**
     * 通过ID查询单条数据
     *
     * @param declareProductId 主键
     * @return 实例对象
     */
    BillDeclareProductInfo queryProductInfoById(Integer declareProductId);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareProductInfo> queryAllProductInfoByLimit(int offset, int limit);

    /**
     * 根据报关主表id查询所有的产品信息
     *
     * @param billId 报关主表id
     * @return 对象列表
     */
    List<BillDeclareProductInfo> queryAllProductInfoByBillId(Integer billId);
    /**
     * 新增数据
     *
     * @param billDeclareProductInfo 实例对象
     * @return 实例对象
     */
    BillDeclareProductInfo insertProductInfo(BillDeclareProductInfo billDeclareProductInfo);

    /**
     * 修改数据
     *
     * @param billDeclareProductInfo 实例对象
     * @return 实例对象
     */
    BillDeclareProductInfo updateProductInfo(BillDeclareProductInfo billDeclareProductInfo);

    /**
     * 通过主键删除数据
     *
     * @param declareProductId 主键
     * @return 是否成功
     */
    boolean deleteProductInfoById(Integer declareProductId);


    /*
    * 根据search查询出运明细
    *
    * */
    List<CarryDetailEntity> queryCarryBySearchBillDeclare(carryInfoSearch search);

    /*
    * 根据carryId查询出运产品
    * */
    List<CarryDetailProductEntity> queryCarryProductByCarryId(Integer id);

    /*
    * 根据出运产品查出运配件
    * */
    List<CarryDetailProductPartsEntity> selectPartsByProduct(CarryDetailProductEntity productEntity);

    logo selectLogo(Integer declare_id);

    String selectpickupdate(String billNo);

    List<BillDeclareInfo> checkBillNo(String invoicenumber);

    List<BillDeclareInfo> selectStatSearch(statSearch search);
}